home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TP030892.ARJ / 03-08-92.TPC
Text File  |  1992-03-08  |  80KB  |  1,947 lines

  1.  
  2. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3.  
  4. Conference 4
  5. Date       03-01-92 21:33:40
  6. From       Trevor Carlsen
  7. To         Frank Derks
  8. Subject    help w/search
  9.  
  10.  TCID:afa1ef75 5daa
  11. ML>> can anyone give me any help on searching a text file
  12. ML>> for an inputted string??
  13.  
  14. TC>   A.  The Boyer-Moore string search algorithm ...
  15.  
  16. FD> A piece of pascal code follows......
  17.  
  18. FD> Have you tried executing your piece of code? It doesn't work.
  19.  
  20. That code was a *working* copy of a test program.  If you cannot make it
  21. work then I would suggest that you are doing something wrong or do not know
  22. how to use it or the message you received was incomplete in some way.  I
  23. have tested it again
  24. in response to your statement and find it still works perfectly OK.  In
  25. what way does it "not work"?
  26.  
  27. I do not have the actual message that I posted anymore, so cannot be certain
  28. that something was not deleted in error, but the direct excerpt from my A2FAPQ
  29. is complete and works fine.
  30.  
  31.  
  32. TeeCee
  33.  
  34.  
  35. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  36.  
  37.  
  38. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  39.  
  40. Conference 4
  41. Date       03-01-92 21:32:30
  42. From       Trevor Carlsen
  43. To         Jon Rupert
  44. Subject    File Checking
  45.  
  46.  TCID:8d8bd335 5dab
  47. JR> Boy that's alot of work. Also unnecessary disk access.
  48.  
  49. JR> Function Exists(FName : String) : Boolean;
  50. JR> Var Ins : SearchRec;
  51. JR> Begin
  52. JR>   FindFirst(FName,AnyFile,Ins);
  53. JR>   Exists := DosError = 0;
  54. JR> End;
  55.  
  56. In a function of this type it is reasonable to assume that the reason for
  57. the call is to enable the program to determine whether or not to try and
  58. open a file for some reason.  The difficulty with the above is that it will
  59. return true if FName
  60. is equal to a volume label or directory.  Therefore some error handling
  61. of this kind is indicated.
  62.  
  63. A second option available is the FSearch function -
  64.  
  65. function Exists(FName: string): boolean;
  66.  begin
  67.    Exists := FSearch(FName,'') <> '';
  68.  end;
  69.  
  70. However I prefer your method with extra error checking, as it enables things
  71. like attribute checking etc.
  72.  
  73. TeeCee
  74.  
  75. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  76.  
  77.  
  78. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  79.  
  80. Conference 4
  81. Date       03-01-92 12:52:10
  82. From       Trevor Carlsen
  83. To         Frank Mccormick
  84. Subject    Doors
  85.  
  86.  TCID:3dd1ab32 5dac
  87. FM> A friend of mine has asked me to write a chatdoor for his 2 node SBBS.
  88.  
  89. FM> I work in Turbo Pascal and hope someone here may have a thought on a
  90.  
  91. FM> problem which has arisen.
  92. FM> Whenever the person on the other comport is typing ( a message
  93. FM> presumably to the other port )..the keyboard of the person on the
  94. FM> second comport is almost effectively disabled, as the code is busy
  95. FM> collecting the comport input. Is there a way around this without
  96. FM> getting into Multi-Tasking ?
  97.  
  98. Here is the skeleton of a splitscreen chat mode routine.  It is untested
  99. and obviously some additional work is needed to add word wrap and editing
  100. capbilities (backspace, delete etc.).  It should give you some ideas on what
  101. to do.
  102.  
  103. type
  104.  WindowRec = record
  105.                col,
  106.                row,
  107.                attr,
  108.                xleft,yleft,
  109.                xright,yright: byte
  110.              end;
  111.  DataOrigin = (local,remote);
  112.  
  113. const
  114.  WindowData : array[DataOrigin] of WindowRec =
  115.               ((col: 1; row: 1; attr: WhiteOnBlue;
  116.                 xleft : 1; yleft: 1; xright: 80; yright: 12),
  117.                (col: 1; row: 1; attr: YellowOnBlue;
  118.                xleft : 1; yleft: 13; xright: 80; yright: 24));
  119. var
  120.  CharFrom,
  121.  WindowID : DataOrigin;
  122.  
  123. procedure SaveCursorPos(var x,y: byte);
  124.  begin
  125.    x := WhereX;
  126.    y := WhereY;
  127.  end;  { SaveCursorPos }
  128.  
  129. procedure WriteChar(ch: char);
  130.  begin
  131.    with WindowData[CharFrom] do begin
  132.      TextAttr := attr;
  133.      Window(xleft,yleft,xright,yright);
  134.      gotoXY(col,row);
  135.      write(ch);
  136.      SaveCursorPos(col,row);
  137.    end; { with }
  138.  end;  { WriteChar }
  139.  
  140. function GetChar(var ch: char): DataOrigin;
  141.  begin
  142.    while (not ComWaiting) and (not Keypressed) do;
  143.    if ComWaiting then begin
  144.      GetChar := remote;
  145.      ch      := ComChar;
  146.    end
  147.    else begin
  148.      GetChar := local;
  149.      ch      := ReadKey;
  150.      { Add extended key checking here and send to com port if needed }
  151.    end;
  152.  end; { GetChar }
  153.  
  154. procedure Chat;
  155.  var c : char;
  156.  begin
  157.    Clrscr;
  158.    repeat
  159.      CharFrom := GetChar(c);
  160.      WriteChar(c);
  161.    until c = escape;
  162.  end; { Chat }
  163.  
  164. TeeCee
  165.  
  166.  
  167.  
  168. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  169.  
  170.  
  171. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  172.  
  173. Conference 4
  174. Date       03-01-92 09:16:00
  175. From       Dj Murdoch
  176. To         Jud Mccranie
  177. Subject    Re: Tp 5.5 Vs Tp 6.0
  178.  
  179.  MO>         Jud, in that case hit the down-arrow to get the
  180. MO> history-list of previous search strings.
  181. JM> But that still requires more keystrokes than 4.0 - 5.5 did.
  182. Counting keystrokes isn't meaningful.  I type fast enough that it makes no
  183. difference to me whether I type 1 or 2 keys, as long as I know what to type.
  184. With the 5.5 style search options, there's no hint as to what's available.
  185. You have to
  186. memorize them.  In 5 years of using those ugly searches, I never bothered
  187. to learn all the options - e.g. I still don't know what L means.  I think
  188. that I use TP more intensively than most people, so I'd guess that if I never
  189. learned all the
  190. options, most other people didn't either.
  191. You should read that article on interface design in Computer Language (Feb
  192. 92, p. 42).  It's very well written, and makes a lot of sense.  One of the
  193. points it makes is that if options aren't presented to the user, then chances
  194. are the user
  195. will never know about them.  Users don't want to learn interfaces, they
  196. want to get their work done.
  197. Upgrades are different, of course.  You've already made the investment in
  198. the TP-Wordstar interface.  I think that's the main basis of your objection
  199. - you, like everyone else, don't want to waste time learning a new interface.
  200. The point of
  201. the new design is that you don't need to memorize as much as you did before,
  202. and there's the promise of being able to use your knowledge in other SAA/CUA
  203. programs.
  204. By the way, once you get used to it, the TP 6.0 search & replace system is
  205. much more capable than the 5.5 one.  I've mentioned regular expressions;
  206. there's also the history list.  If you want the 3rd previous search instead
  207. of just the one before,
  208. it's available.  This is handy when you're doing a complicated search, and
  209. you want to look at something else - you can save your current spot (Ctrl-K-1,
  210. as in 5.5), search for something else, then return and continue.  In 5.5,
  211. you'd have to
  212. re-enter the old search key from scratch.
  213. I'll also admit that I have used the default search key on one or two occasions.If you point at the declaration of an identifier, you can search for uses
  214. of it very quickly - Ctrl-Q-F-Enter.  I don't think that should be the default
  215. though;
  216. more often I do Ctrl-Q-F-Down-Enter-(edit)-Enter, so that should be the
  217. default.
  218. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  219.  
  220.  
  221. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  222.  
  223. Conference 4
  224. Date       03-01-92 09:54:00
  225. From       Dj Murdoch
  226. To         Jud Mccranie
  227. Subject    Re: Tp 6.0 Ide
  228.  
  229.  JM> Wasted keystrokes because of poor design, in my opinion.  The old
  230. JM> system works better for me.  Often I'm doing a search and I make a
  231. JM> change at that location.  Then I want to find the next occurance.
  232. JM> But by that time the default string has changed.
  233. Oh, I see your problem.  You didn't know about Ctrl-N.  That's the same as
  234. in TP 5.5:  it finds the next occurence of the same string, without another
  235. Ctrl- Q-F.
  236. JM> Memory
  237. JM> DOS    17K
  238. JM> Turbo 269K
  239. JM> Free  354K
  240. There's something wrong here.  My setup has
  241. DOS:       104K TURBO:     176K Free:      344K
  242. Something in your TP setup is wasting 90K.  Have you gone through the list
  243. on p. 146?  Here are my Options/Environment/Startup choices:
  244. [ ] Dual monitor support
  245. [ ] Graphics screen save    Window heap size   32
  246. [ ] EGA/VGA palette save
  247. [ ] CGA snow checking       Editor heap size   28
  248. [ ] LCD color set
  249. [X] Use expanded memory     Overlay heap size  64
  250. [ ] Load TURBO.TPL
  251. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  252.  
  253.  
  254. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  255.  
  256. Conference 4
  257. Date       03-01-92 10:11:10
  258. From       Dj Murdoch
  259. To         Jud Mccranie
  260. Subject    Re: New Reader!
  261.  
  262.  JM> No, I don't forsee a time that I'll ever do assembler.  I got BASM
  263. JM> with 5.0 or 5.5 pro pack, but I never even loaded it on my hard disk.
  264. JM> I got it for TD (and later TProf).  I've been programming 20 years
  265. JM> this spring, and I'm proud to say that I've never written a line of
  266. JM> assembler.
  267. That wasn't BASM, that was TASM.  BASM is much, much easier than TASM, because
  268. it uses all the TP conventions for memory models, startup code, and so on.
  269.  
  270. I'm sort of curious why you'd be proud never to have used a useful tool,
  271. but it's hardly a Pascal topic, so I won't ask.
  272. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  273.  
  274.  
  275. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  276.  
  277. Conference 4
  278. Date       03-01-92 10:18:10
  279. From       Dj Murdoch
  280. To         David G. Edwards
  281. Subject    Re: Turbo Vision Streams
  282.  
  283.  DG> I was merrily rowing in DJ's stream example when I
  284. DG> suddenly noticed that one of my oars was out of the water
  285. DG> -- sending me in circles.
  286. DG> I want to report the name of the file when I report a file
  287. DG> error.  Apparently, FileName is not one of the visible fields.
  288. It's not an invisible field, either.  Streams don't keep track of the filename.
  289. I agree that's a bit of a pain.  You've got a couple of choices:
  290. Make a new record or object with the name as one field and the stream as
  291. another.  Something like:
  292. type
  293.   PStreamWithName;
  294.   TStreamWithName = record
  295.     name : Pstring;
  296.     S    : PStream;
  297.   end;
  298. Then your CheckError procedure would work on a PStreamWithName or a TStreamWithN
  299. The other choice is to make a descendant of the stream type you want to use,
  300. which has the filename as an additional field.  I'd say this is preferable,
  301. especially if you always want to use buffered streams.  If you want flexibility
  302. in the type
  303. of stream to use, you'd probably want some variation on the first choice.
  304.  
  305. BTW, I'd use a PBufStream value parameter or a TBufStream var parameter,
  306. but not a TBufStream value parameter - that would mess you up if you call
  307. any methods that change the internal state.  I generally prefer to use var
  308. parameters, except
  309. when I'm working with pointers to objects, and signalling construction errors
  310. by nil pointers.
  311. Here's what I'd do to fix it up:
  312. type
  313.  PNamedStream = ^TNamedStream;
  314.  TNamedStream = object(TBufStream)
  315.    name : PString;
  316.    constructor init(filename:string; mode,size:word);
  317.  end;
  318. DG> procedure CheckError(var afile : TNamedStream);
  319. and so on.
  320. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  321.  
  322.  
  323. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  324.  
  325. Conference 4
  326. Date       03-02-92 12:42:00
  327. From       Trevor Carlsen
  328. To         Joshua K. @ 930/22
  329. Subject    Re: Pascal, the language
  330.  
  331.  TCID:af393dd2 5e0c
  332. JK> The thing to remember about ANY computer language is that
  333. JK> 75-90% of the time you spend is going to be with pencil and
  334. JK> paper.
  335.  
  336. JK> I'll disagree with that, I only use pencil and paper when
  337. JK> taking notes on ideas, and occaisionally on debugging, but
  338. JK> figuring out the mathematics or something like that, let TP
  339. JK> 6.0 do that for you...so I'd say the total time I spend
  340. JK> using pencil and paper to program is about 7%, no where near
  341. JK> 75-90%...
  342.  
  343. Your figure is probably accurate for most "hobby" programmers.  In fact some
  344. may have a figure closer to 0% !  Serious or professional developers working
  345. on a project would easily spend *at least* 75% of the time allocated on the
  346. analysing,
  347. planning, functional specifications and test specifications, before one
  348. line of code is written.
  349.  
  350. As an example, the project I'm currently involved with, the software represents
  351. a nine month development effort.  Our schedule only calls for coding to commencein the twelfth week of the project and even then it only represents less
  352. than 30%
  353. of the time expended, with documentation and acceptance tests taking much
  354. more than that.  The functional specs and the test specs alone will occupy
  355. ten weeks of those first twelve weeks.
  356.  
  357. TeeCee
  358.  
  359. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  360.  
  361.  
  362. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  363.  
  364. Conference 4
  365. Date       03-02-92 11:29:40
  366. From       Trevor Carlsen
  367. To         All
  368. Subject    Moderator
  369.  
  370.  TCID:5007d76e 5e0d
  371. I will be absent from this echo for the next couple of weeks.  Tomorrow I
  372. plan on flying across the continent to Sydney to help start a large project
  373. I am working on.
  374.  
  375. Any messages to me will be held by my system and read and answered on return.
  376.  
  377. Trevor Carlsen
  378. Moderator.
  379.  
  380. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  381.  
  382.  
  383. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  384.  
  385. Conference 4
  386. Date       03-02-92 11:27:00
  387. From       Trevor Carlsen
  388. To         Eddie Braiter
  389. Subject    TP Internal error
  390.  
  391.  TCID:39f2efd0 5e0e
  392. EB> Anyone knows what the Turbo Pascal v6.0 internal error
  393. EB> number 200 is?
  394.  
  395. RTFM! p344.
  396.  
  397. TeeCee
  398.  
  399. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  400.  
  401.  
  402. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  403.  
  404. Conference 4
  405. Date       03-02-92 12:37:20
  406. From       Trevor Carlsen
  407. To         Jonas Bofjall
  408. Subject    Longer files in TP5
  409.  
  410.  TCID:7b58417d 5e0f
  411. JB> Is there any way to edit large files in TP 5.0 (which is
  412. JB> still my favorite, better help and much smaller than
  413. JB> TP6)...? Any patches? My TP just cuts them around 60 - 70 kB
  414. JB> something.
  415.  
  416. The TP5 IDE is severely crippled.  The TP6 IDE will allow you to edit large
  417. files and its help system is significantly larger and better than that in
  418. TP5. (Mind explaining why you consider the help system to be inferior?)
  419.  
  420. If you don't like the TP6 IDE then your only other alternative is one of
  421. the many programmer's editors available.  To use these you don't need to
  422. give up anything you like about the TP5 IDE - including integrated debugging
  423. (strictly speaking
  424. its not integrated but, properly setup, you won't be able to detect any
  425. difference except for the greater power available with TD) and you will have
  426. much greater flexibility.
  427.  
  428. I would also advise that you examine your design philosophy if you have source
  429. files exceeding 64K.  To the best of my recollection, I have never needed
  430. a capacity greater than 64K.  I firmly believe that if a source file is that
  431. big, something
  432. should be done to make its size more manageable by breaking it into smaller
  433. units.
  434.  
  435. TeeCee
  436.  
  437. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  438.  
  439.  
  440. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  441.  
  442. Conference 4
  443. Date       03-02-92 08:47:10
  444. From       Trevor Carlsen
  445. To         Mike Wilson
  446. Subject    Functions...
  447.  
  448.  TCID:a2cb8dd7 5e10
  449. MW> How would one figure out the COST if the MarkUp AND
  450. MW> SellingPrice were known?
  451.  
  452. cost := SellingPrice * (100 / (100 + Markup));
  453.  
  454. TeeCee
  455.  
  456. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  457.  
  458.  
  459. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  460.  
  461. Conference 4
  462. Date       03-02-92 09:43:00
  463. From       Trevor Carlsen
  464. To         Jud Mccranie
  465. Subject    Tp 5.5 Vs Tp 6.0
  466.  
  467.  TCID:b44b58c9 5e11
  468. JM> The complaint is that it used to work right before 6.0.  If
  469. JM> it is right don't screw it up.
  470.  
  471. The single major complaint 90% of users had with the old IDE was its lack
  472. of functionality.  TP6IDE addressed most of those complaints but didn't get
  473. it exactly right as regards some other minor things.
  474.  
  475. TeeCee
  476.  
  477.  
  478. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  479.  
  480.  
  481. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  482.  
  483. Conference 4
  484. Date       03-02-92 12:25:40
  485. From       Trevor Carlsen
  486. To         Jud Mccranie
  487. Subject    New Reader!
  488.  
  489.  TCID:33438de8 5e12
  490. Referring to TP6 ...
  491.  
  492. JM> I don't need TPCX (yet)...
  493.  
  494. And yet later in the message you say..."I can't use it anyway on my bread
  495. and butter program because [TP6IDE] uses too much memory.". I would have
  496. thought that means that you *definitely* need it, or as an absolute minimum
  497. you need TPC.
  498.  
  499. JM> ... and have no need for BASM.
  500.  
  501. For any serious programming some assembler is unavoidable.  (I too avoid
  502. it like the plague but there are times when it is impossible to produce an
  503. efficient and professional program without it.)  Therefore BASM is a real
  504. bonus.  The use of
  505. third party toolboxes such as TPro and OPro help a great deal here, as so
  506. much of the detailed asm work is done by them for you, but some assembler
  507. is still essential at times.
  508.  
  509. JM> ... I don't know what you mean by "extended functions".
  510.  
  511. TP6's extended functions - the ability to use a function as if it was a
  512. procedure - can be very useful.
  513.  
  514. JM> ... The 286 instructions made only a 2% difference in my
  515. JM> tests.
  516.  
  517. 2% is 2% is 2%.   Every little helps.
  518.  
  519. JM> ... (Some of my clients are still running on 8088 too.)
  520.  
  521. Nothing stops you producing two versions.
  522.  
  523. JM> I've looked at Brief, TPE, and QEdit and found them all
  524. JM> lacking compared to the TP IDE.
  525.  
  526. I don't think I am aware of ONE thing that they cannot do that the IDE does
  527. (apart from display a Borland Copyright notice :-) ), and they have MANY
  528. functions not available in the IDE - some insignificant but some really major.
  529.  
  530. JM> However, none of them have the absolutely wonderful
  531. JM> integrated debugger in TP 5.x.  That is such a wonderful
  532. JM> tool I don't think I will ever give it up.  You'll have to
  533. JM> kill me first and pry it out of my clenched fingers!
  534.  
  535. Why give it up just because you give up the IDE? I use TD and I guarantee
  536. that
  537. you would not be able to tell the difference if it were not for the added
  538. power and different screen displays.
  539.  
  540. JM> No, the 6.0 package is not as good as the 5.5 one because of
  541. JM> two main reasons (1) the 6.0 IDE is not designed to be
  542. JM> functional...
  543.  
  544. Very subjective but you state it as if it were fact. There are some minor
  545. things I would probably agree with you on, if indeed everything you have
  546. highlighted is true. As I don't use it (I tried it briefly and did not like
  547. it), I'll take your
  548. word for that even allowing for all the foregoing.  In any event, most informedopinions seem to agree that the TP6IDE is much closer to being a professional
  549. grade environment than is the TP5IDE.
  550.  
  551. Most arguments about not using a professional grade editor instead of the
  552. IDE
  553. revolve around the following -
  554.  
  555.    "I want to have my error highlighted and be returned to that spot in
  556. the
  557.     file when it occurs."
  558.     Available in the professional editors.
  559.  
  560.     "I like the integerated debugger"
  561.     Available in just as easy to use mode in more powerful - but just as
  562.     easy to use - stand alone debugger providing the necessary care is taken
  563.     in the initial setting up.
  564.  
  565.     "I like the help system"
  566.     Available - in improved form in the professional setups.  In fact you
  567. can
  568.     integrate your own personal libraries of functions and procedures into
  569.     it.
  570.  
  571.     "I like to compile/run programs from the editor"
  572.     This is something that shouldn't be done except on small Q&Ds.  However
  573.     the equivalent is available from a professional setup.  And it is safer.
  574.  
  575. There are others but they are probably the main ones.
  576.  
  577. I like the added power that a professional type editor environment gives
  578. me because -
  579. - I can set it up *exactly* to my liking.
  580. - I can cut/paste etc between multiple files using one keypress.
  581. - I can "precompile" using a precompiler I am developing.
  582. - I can compile bigger programs more easily.
  583. - I can edit more than one file at a time and although I don't think any
  584.  of my source files have ever exceeded 64K, I do not have that limitation
  585.  should it happen.
  586. - I have available on-line tools such as hex calculator, ascii reference,
  587.  library reference, interrupt tables etc. etc.
  588. - I can edit and assemble or compile in different languages at the same time.
  589. - I have begin/end and bracket matching.
  590. - I can have extensive keyboard macros.
  591.  
  592. JM> ... I don't forsee a time that I'll ever do assembler...
  593.  
  594. I just cannot believe that a *serious* programmer can logically say that
  595. and expect to be taken even half seriously by other programmers.
  596.  
  597. TeeCee
  598.  
  599.  
  600.  
  601. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  602.  
  603.  
  604. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  605.  
  606. Conference 4
  607. Date       03-02-92 10:56:20
  608. From       Trevor Carlsen
  609. To         Jud Mccranie
  610. Subject    Pascal, The Language
  611.  
  612.  TCID:af39f727 5e13
  613. JM> C and Pascal second to assembler in power and flexibility?
  614. JM> To my way of thinking, it is the other way around.  Sure,
  615. JM> assembler produces smaller files and faster code, but
  616. JM> powerful?  No.
  617.  
  618. Power and flexibility are usually mutually exclusive and therefore should
  619. not  be grouped together like that.  Assembler is *by far* the most powerful
  620. language one can use.  NOTHING comes a close second.
  621.  
  622. JM> [It is] hard to express a complex program or algorithm.
  623. JM> Flexible?  Not very compared to any high-level language.
  624.  
  625. True.
  626.  
  627. TeeCee
  628.  
  629.  
  630. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  631.  
  632.  
  633. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  634.  
  635. Conference 4
  636. Date       03-02-92 12:12:10
  637. From       Trevor Carlsen
  638. To         Sysop
  639. Subject    Rules of this echo
  640.  
  641.  TCID:a235bf92 5e14
  642. Would all sysops please ensure that a copy of these rules is available
  643. to all users of the echo.  It suggested that they be made a protected
  644. message to ensure that normal message area housekeeping does not not
  645. result in them being deleted.  There are very minor changes this month,
  646. there is no need to take the old one down unless you feel like it.
  647.  
  648. RULES OF THE PASCAL ECHO
  649.  
  650. The Pascal echo is an internationally distributed FidoNet echo devoted
  651. to the discussion and promotion of the Pascal programming language in
  652. ALL ITS VARIATIONS.  It is distributed globally.
  653.  
  654. MODERATOR.
  655.  
  656. The currently appointed Moderator is Trevor Carlsen. He can be reached
  657. by Netmail at 3:690/644 or by normal postage by writing to -
  658.  
  659.  Trevor J Carlsen
  660.  Post Office Box 568
  661.  Port Hedland
  662.  Western Australia 6721
  663.  Phone (voice) +61 91 73-2026  (Local time is GMT+8)
  664.        (data)  +61 91 73-2569
  665.  
  666. RULES.
  667.  
  668. 1. Leave moderation to the moderator. Self appointed "echo policemen"
  669.    only waste echo space and create ill-feeling.
  670.  
  671. 2. NO FLAMING. If you feel that you have been insulted in some way by
  672.    somebody, you have three options.
  673.     (a) Complain by netmail to the person concerned.
  674.     (b) Bring the matter to the moderator's notice - again by netmail.
  675.     (c) Ignore it. (the preferred option!)
  676.    If you do not have echo mail access, ask your sysop for advice.
  677.  
  678. 3. Person-person messages that are not of general interest to other
  679.    users are STRICTLY not permitted. Netmail these types of messages.
  680.  
  681. 4. When replying to messages try and do so "off-line" and quote some of
  682.    the message being replied to. However don't go overboard with
  683.    quoting. Quote just enough to enable the context of the reply to be
  684.    fully understood and in particular DO NOT INCLUDE PARTS OF THE TEAR
  685.    AND ORIGIN LINES.
  686.  
  687. 5. When replying to questions with code examples, test them where
  688.    possible by compiling and running them (or state that you have not
  689.    done this). If possible always quote manual references, text
  690.    references etc. If your code example contains inline code then it is
  691.    only fair that you FULLY comment such code so that users can
  692.    determine the validity or viability of that code BEFORE risking it
  693.    on their own machines/data.
  694.  
  695. 6. If replying to a question where you are disagreeing with the other
  696.    person's code or statement/s, support your viewpoint with working
  697.    code examples or valid text references. This will be more productive
  698.    than unsupported statements. If you are not prepared to do this then
  699.    don't reply in the first place!
  700.  
  701. 7. DO NOT ENTER OR REPLY TO off-topic messages.
  702.    The subject matter is Pascal.  Discussions on religion, politics,
  703.    copyright, other programming languages and personal messages are
  704.    OFF-TOPIC.
  705.  
  706. 8. No "thank-you" or "no content" or "rubbish" messages. Sysops spend a
  707.    great deal of time and money to enable the distribution of echoes
  708.    such as this. Please respect this and avoid messages such as "Thank
  709.    you. Just what I needed" or "I agree" etc. By observing this
  710.    etiquette you will be helping to ensure greater participation in the
  711.    future.
  712.  
  713. 9. All messages are to be in the English language and must be in PLAIN
  714.    TEXT.  No encryption of any kind is permissable as this is in direct
  715.    contravention of FidoNet policy.  This also means that binary file
  716.    transfer by conversion to asciiz is not allowed.
  717.  
  718. 10. Limited, low key, on-topic advertising is permitted. The key words
  719.    here are ON-TOPIC and LOW KEY. Please restrict any notices to a
  720.    "one-time" issue and keep it brief and informative with NO SALES
  721.    HYPE. Any notice must be of interest to the echo participants in
  722.    general. Therefore this excludes such items as job vacancies, BBS
  723.    ads, for sale notices and similar as this is an International echo.
  724.  
  725. 11. When seeking assistance -
  726.    a)  If Turbo Pascal is your language, place the cursor on the key
  727.        word and call the on-line help (Ctrl-F1 in the IDE) to see if
  728.        the answer may be there.
  729.    b)  Double check the manual to see if the answer is there.
  730.    c)  When writing the message include enough code to allow would-be
  731.        helpers to have a chance to determine what the problem might be.
  732.        If possible condense the problem into a tiny working example and
  733.        post that.
  734.    d)  This is a high volume echo so use a subject line in the message
  735.        that is likely to gain attention from the experts who are often
  736.        too busy to read every message.  "Help wanted" or similar is a
  737.        good way to be ignored. Something like "Exec procedure not
  738.        working" is better.
  739.    e)  Remember that a reply of "RTFM" is not considered or meant as an
  740.        insult. In fact it is considered a polite (in spite of the
  741.        connotations) way of reminding someone that the answer they seek
  742.        is in the manual.
  743.    f)  Remember also that your reply may come from anyone, of possibly
  744.        unknown skill level.  Don't be too upset if misled as it is
  745.        probably unintentional and will almost certainly be corrected by
  746.        another reader.
  747.  
  748. 12. When offering advice or help -
  749.    a)  Do so in a helpful, polite manner.  Don't be condescending - not
  750.        everybody may have your experience or skills.
  751.    b)  Refer to the page in the manual where the answer is if your
  752.        answer is "RTFM"!
  753.  
  754. 13. Aliases are not permitted UNLESS you also use your real name in the
  755.    message.  However if you use an alias or just your initials in the
  756.    header, you should be aware that many readers will not even bother
  757.    to read your message.
  758.  
  759. 14. Messages should comply with the FidoNet message requirements. Origin
  760.    lines should not exceed 79 characters, tear lines must not exceed 25
  761.    characters and messages should not contain any "hi-bit" (characters
  762.    with an ascii code over 127) characters. No encrypted text is
  763.    permitted.  Messages are to be under 150 lines in length.
  764.  
  765. 15. Any suggestions re alterations to this message are welcome. Please
  766.    make such suggestions by netmail.
  767.  
  768.  
  769. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  770.  
  771.  
  772. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  773.  
  774. Conference 4
  775. Date       03-02-92 11:20:50
  776. From       Trevor Carlsen
  777. To         All
  778. Subject    Contest
  779.  
  780.  TCID:28b6f6dc 5e15
  781.     $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
  782.     $                                                                 $
  783.     $   In order to promote both this echo and the use of Pascal as   $
  784.     $   an all purpose language, I have decided to offer a prize of   $
  785.     $   two hundred and fifty dollars (Aust.) to the contributor      $
  786.     $   who sends me the most useful utility/hint/program/unit in the $
  787.     $   next eleven months. There will be a second prize of one       $
  788.     $   hundred dollars, and a third prize of fifty dollars.          $
  789.     $                                                                 $
  790.     $   Conditions:                                                   $
  791.     $                                                                 $
  792.     $   All entries are to be submitted either on a 5.25" or 3.5"     $
  793.     $   disk or by crashing the file direct to my node.  All source   $
  794.     $   code must be included and must be expressly released into     $
  795.     $   the PUBLIC DOMAIN. No copyright material will be accepted.    $
  796.     $   Entries are to be in the Pascal programming language, but     $
  797.     $   may contain in-line machine code or external routines. If     $
  798.     $   this is the case, full source code, as comments and a ready   $
  799.     $   include .OBJ file with assembler source MUST be included.     $
  800.     $   Generally pure Pascal code will receive higher marks!         $
  801.     $   All material is to be for the MS-DOS (or compatible)          $
  802.     $   programming environment.                                      $
  803.     $                                                                 $
  804.     $   All material must have full details of the author's name,     $
  805.     $   address and, if possible, a telephone number for voice        $
  806.     $   contact.                                                      $
  807.     $                                                                 $
  808.     $   The sole judge and arbitor will be myself and the best of the $
  809.     $   entries will be posted in the echo on a progressive basis.    $
  810.     $   The ten finalists will be re-posted and echo participants     $
  811.     $   invited to vote to determine the eventual winner.             $
  812.     $                                                                 $
  813.     $   Entries should be submitted to                                $
  814.     $        Trevor J Carlsen                                         $
  815.     $        PO Box 568                                               $
  816.     $        Port Hedland                                             $
  817.     $        Western Australia 6721  Phone (voice) +61 91 73 2026     $
  818.     $                                                                 $
  819.     $   no later than 30th June 1991. The final selection will take   $
  820.     $   place during July 1991. I anticipate being able to make the   $
  821.     $   final announcement in time for FidoCom '91 and perhaps meet   $
  822.     $   the winners (should they be from the US) at that time.        $
  823.     $                                                                 $
  824.     $   The media (disks etc) that entries are submitted on will      $
  825.     $   become my property unless $2.50 (Aust) (approx US$2.00) is    $
  826.     $   included for return postage.                                  $
  827.     $                                                                 $
  828.     $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
  829.  
  830.  
  831.  
  832.  
  833. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  834.  
  835.  
  836. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  837.  
  838. Conference 4
  839. Date       03-02-92 12:57:00
  840. From       Trevor Carlsen
  841. To         Terry Towle
  842. Subject    Re: Self Modifying Code
  843.  
  844.  TCID:0df3f3e2 5e16
  845. TT> Not sure of the difference.  I'm trying to make a demo
  846. TT> program thatwill only run a certain number of times and
  847. TT> won't be thwarted by DOScopy or diskcopy.  Tech support at
  848. TT> Borland said self modifying codebut couldn't give any
  849. TT> references.  Trying to find an example somewhereand would
  850. TT> appreciate any leads.
  851.  
  852. It really depends on how much trouble you wish to expend in preventing unauthoriuse.  Nothing is foolproof but here are some things that can be done that
  853. will prevent all but the most sophisticated of users -
  854. 1. Put all details in a coded configuration file (including the counter)
  855. which is rewritten in full every execution using a different coding key.
  856. The coding key can be calculated by algorithm determined by key bytes in
  857. the file.
  858. 2. Include in that configuration file a "snapshot" of vitals which in combinatioare likely to be unique to that machine.  eg. Volume labels and serial numbers,
  859. CMOS configuration, root directory signature etc.
  860. 3. Personalise the demo copies.
  861. 4. Have a hardcoded date limitation.
  862.  
  863. etc.
  864.  
  865. TeeCee
  866.  
  867. * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  868.  
  869.  
  870. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  871.  
  872. Conference 4
  873. Date       03-02-92 03:02:00
  874. From       Terry Hughes
  875. To         Joshua K. @ 930/22
  876. Subject    Re: Execute With Swap
  877.  
  878.  JK@9>Sorry, this is off-topic, but where did you get OLX 2.2?
  879. JK@9>I have 2.1 that came with QModem 5.0.
  880. It just arrived in the mail about two weeks ago from Mustang
  881. Software (the new owners of OLX, formerly SLMR). I assumed
  882. it went out to all SLMR customers but I could be wrong.
  883. JK@9>Anyways, something that's on-topic, What benefits does
  884. JK@9>ExecWSwap have over ExecSwap?
  885. ExecWSwp combines the old ExecSwap with the old ExecWin (which
  886. let you confine a child process's output to a specified window).
  887. So now we have one unit, ExecWSwp that can do swap execs plus
  888. keep the child's output within a window.
  889. -Terry
  890. * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  891. * Origin: The Programmers Playhouse (1:128/60)
  892.  
  893.  
  894. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  895.  
  896. Conference 4
  897. Date       03-01-92 20:07:00
  898. From       Norbert Igl
  899. To         Andrew J. Mead
  900. Subject    Interrupt $13
  901.  
  902.  > I am looking for a workable Interrupt procedure for Int 13h. Int 13h
  903. > (as well as 25h and 26h) don't return the same way that the other
  904. > BIOS interrupts do.
  905. [...]
  906. > I have TP6, so asm blocks are okay.
  907. int13busy db 0
  908. oldint13  dd 0
  909. int13 proc far
  910.      pushf              { save flags}
  911.      inc [int13busy]    { set semaphore }
  912.      call [oldint13]    { do the work }
  913.      pushf              { save returned flags }
  914.      dec [int13busy]    { clear semaphore }
  915.      popf               { restore returned flags }
  916.      retf 0002          { give flags from Int13 to User }
  917. int13 endp
  918. Bye from Germany, Norbert
  919. * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  920.  
  921.  
  922. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  923.  
  924. Conference 4
  925. Date       03-01-92 20:45:00
  926. From       Norbert Igl
  927. To         Trevor Carlsen
  928. Subject    Variable number of parameters
  929.  
  930.  Hi, TeeCee.
  931. >  NI>    this question was a topic a while ago,
  932. >  NI>    and *no* solution was found....
  933. > That is not quite true...(depending on the exact needs).  In the
  934. > example you have posted it is unnecessary to go to all that trouble.
  935. > A very simple TFDD (text file device driver) as I posted here on 20th
  936. i've known before...i read this echo regulary...
  937. > am sorry that you went to such a lot of effort to help find a
  938. > solution because you would not have seen the very simple solution
  939. > with real variable parameters.)
  940. >  NI>  CallWithManyParams
  941. >  NI>      ('"MA is" 31 "Years old and got" 2 "children"');
  942. > Using a TFDD the above is just a matter of -
  943. > write(FStr,'MA is ',MaAge,' Years old and got ',NumbOfKids,'children');
  944. > FormattedStr := GetFStr(FStr);
  945. > No parsing, no hassles, much faster and a variable number of
  946. > parameters.
  947.   Quite right, but my procedure is able to do more than convert
  948.   a variable number of parameters into a formatted string.
  949.   It is able to deal with the original variable(s), type-depending!
  950.   If u want to format an output-string, the TFDD is the solution!
  951.   Bye from Germany, Norbert
  952. * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  953.  
  954.  
  955. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  956.  
  957. Conference 4
  958. Date       03-02-92 08:04:30
  959. From       Dj Murdoch
  960. To         Mike Copeland
  961. Subject    Re: Is this a compiler (TP5.5) bug?
  962.  
  963.  MC>    I must have found a "critical mass" problem in TP5.5,
  964. MC> because all I have to do is move some of the declarations
  965. MC> from the global Unit to the one which uses it...
  966. That changes the scoping rules, too.  Unless the global unit is the very
  967. *last* one in the Uses clause of the one which uses it, I'd strongly suspect
  968. that you've got a duplicate identifier in one of your other units, and the
  969. compiler thinks
  970. you mean the other one.
  971. Try moving the global unit to the end of the Uses list.  If that fixes it,
  972. then all you need to do is to figure out which other unit shares an identifier
  973. name.
  974. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  975.  
  976.  
  977. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  978.  
  979. Conference 4
  980. Date       03-02-92 08:11:40
  981. From       Dj Murdoch
  982. To         Kelly Small
  983. Subject    Re: TP Internal error
  984.  
  985.  EB > Anyone knows what the Turbo Pascal v6.0 internal
  986. KS> error number 200 is? I ju EB > got it a couple days ago while programming
  987. using
  988. KS> TechnoJock's Turbo Toolki EB > and TPDB (by Brian Carrol - accesses
  989. dBase DBF files).
  990. KS> You DO have a manual right????  Look in the back of the
  991. KS> programmers guide under "fatal errors".
  992. I think he meant that the compiler or the IDE died with an error 200.  I'm
  993. pretty sure it means the same thing as a run-time error 200, i.e. divide
  994. by zero.  Most likely is that his code overwrote some critical part of the
  995. IDE's code; it's also
  996. possible that there's a bug in the IDE.
  997. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  998.  
  999.  
  1000. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1001.  
  1002. Conference 4
  1003. Date       03-02-92 19:35:20
  1004. From       Dj Murdoch
  1005. To         Richard Morris
  1006. Subject    Extended Pascal (was:  TP 6.0)
  1007.  
  1008.  > I'm also waiting for life after TP6.  If even a
  1009. > fraction of the proposed changes to ISO Pascal appear
  1010. > in Borland's next TP it will have been well worth it.
  1011. RM> Perhaps, you may wish to elaborate on some of the jucier proposed changes.
  1012. Here's a message I saw recently on Usenet:
  1013. Article 10027 of comp.lang.pascal:
  1014. From: reagan@hiyall.enet.dec.com (John R.  Reagan)
  1015. Newsgroups: comp.lang.pascal
  1016. Subject: Re: Extended Pascal:  What are the extensions?
  1017. Date: 17 Feb 92 14:21:35 GMT
  1018. Organization: Digital Equipment Corporation
  1019. In article <iz4Hacaj5@cs.psu.edu>, so@csp.cs.psu.edu (Nicol C. So) writes...
  1020. >Yesterday I saw the 4th edition of "Pascal User Manual and Report" in our
  1021. >library here.  In the forewords(?), it was mentioned that the drafting of
  1022. >the standard
  1023. of an Extended Pascal is underway.  Does anyone out there know >anything
  1024. about Extended Pascal?  In particular, what are the extensions?
  1025. The 4th edition of the Pascal User Manual and Report is not Extended Pascal.
  1026. The 4th edition is just a revised version of the previous book with minor
  1027. typos and ambigiuities corrected.
  1028. However, Extended Pascal is finished (it was ratified in late 1989) and availablfrom the IEEE.  The IEEE order number is SH13243.  The cost is around $50US.
  1029. Before the list of features, I'll talk about availability...  To the best
  1030. of my knowledge, there is no complete implementation of Extended Pascal yet
  1031. (as of 17-Feb-1992).
  1032. However, there are several vendors that have announced plans to add features
  1033. from Extended Pascal.  I won't speak for them....  The one I *can* speak
  1034. of is VAX Pascal.  VAX Pascal V4.n contains many, but not all, of the new
  1035. features from  Extended
  1036. Pascal and many of VAX Pascal's extensions are now standard features in
  1037. Extended Pascal.
  1038. There are some popular features (namely object oriented support and exception
  1039. handling) that are missing from the Extended Pascal standard.  The committee
  1040. is aware of the need for these features, but didn't get them finished for
  1041. the standard.
  1042.  The committee expects to release technical reports in the coming year on
  1043. both of these areas.
  1044. Enjoy!
  1045.               -John Reagan, VAX Pascal Project Leader &
  1046.                          X3J9 Secretary
  1047. Features of Extended Pascal (from the foreword of the standard):
  1048. - Modularity and Separate Compilation.  Modularity provides for
  1049.  separately-compilable program components, while maintaining type
  1050.  security.
  1051.  o Each module exports one or more interfaces containing entities
  1052.    (values, types, schemata, variables, procedures, and functions)
  1053.    from that module, thereby controlling visibility into the module.
  1054.  o A variable may be protected on export, so that an importer may use
  1055.    it but not alter its value.  A type may be restricted, so that its
  1056.    structure is not visible.
  1057.  o The form of a module clearly separates its interfaces from its
  1058.    internal details.
  1059.  o Any block may import one or more interfaces.  Each interface may
  1060.    be used in whole or in part.
  1061.  o Entities may be accessed with or without interface-name qualification.
  1062.  o Entities may be renamed on export or import.
  1063.  o Initialization and finalization actions may be specified for each
  1064.    module.
  1065.  o Modules provide a framework for implementation of libraries and
  1066.    non-Pascal program components.
  1067. Example:
  1068. module employee_sort interface;
  1069.   export employee_sort = (sort_by_name,sort_by_clock_number,employee_list);
  1070.   import generic_sort;
  1071.   type
  1072.      employee = record
  1073.         last_name,first_name : string(30);
  1074.         clock_number : 1..maxint;
  1075.      end;
  1076.      employee_list(num_employees : max_sort_index) =
  1077.         array [1..num_employees] of employee;
  1078.   procedure sort_by_name(employees : employee_list;
  1079.                 var something_done : Boolean);
  1080.   procedure sort_by_clock_number(employees : employee_list;
  1081.                 var something_done : Boolean);
  1082. end.
  1083. - Schemata. A schema determines a collection of similar types.  Types
  1084.  may be selected statically or dynamically from schemata.
  1085.  o Statically selected types are uses as any other types are used.
  1086.  o Dynamically selected types subsume all the functionality of,
  1087.    and provide functional capability beyond, conformant arrays.
  1088.  o The allocation procedure NEW may dynamically select the type
  1089.    (and thus the size) of the allocated variable.
  1090.  o A schematic formal-parameter adjusts to the bounds of its
  1091.    actual-parameters.
  1092.  o The declaration of a local variable may dynamically select the
  1093.    type (and thus the size) of the variable.
  1094.  o The with-statement is extended to work with schemata.
  1095.  o Formal schema discriminants can be used as variant selectors.
  1096. Example:
  1097. type
  1098.   SWidth = 0..1023;
  1099.   SHeight = 0..2047;
  1100.   Screen(width: SWidth; height: SHeight) =
  1101.            array [0..height, 0..width] of boolean;
  1102.   Matrix(M,N: integer) = array [1..M,1..N] of real;
  1103.   Vector(M: integer) = array [1..M] of real;
  1104.   Color = (red,yellow);
  1105.   Color_Map(formal_discriminant: color) =
  1106.      record
  1107.      case formal_discriminant of
  1108.      red: (red_field : integer);
  1109.      yellow : (yellow_field : integer);
  1110.      end;
  1111. function bound : integer;
  1112. var s : integer;
  1113.   begin
  1114.   write('How big?');
  1115.   readln(s);
  1116.   bound := s;
  1117.   end;
  1118. var
  1119.   My_Matrix : Matrix(10,10);
  1120.   My_Vector : Vector(bound);  { Notice the run-time expression! }
  1121.   Matrix_Ptr : ^Matrix;
  1122.   X,Y : integer;
  1123.   begin
  1124.   readln(x,y);
  1125.   new(Matrix_Ptr,X,Y);
  1126.   end
  1127. (continued in next message)
  1128. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1129.  
  1130.  
  1131. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1132.  
  1133. Conference 4
  1134. Date       03-02-92 19:37:30
  1135. From       Dj Murdoch
  1136. To         Richard Morris
  1137. Subject    Extended Pascal (was:  TP 6.0)
  1138.  
  1139.  (continued from previous message)
  1140. - String Capabilities.  The comprehensive string facilities unify fixed-length
  1141.  strings and character values with variable-length strings.
  1142.  o All string and character values are compatible.
  1143.  o The concatenation operator (+) combines all string and character values.
  1144.  o String may be compared using blank padding via the relation operators,
  1145.    or using no padding via the functions EQ, LT, GT, NE, LE, and GE.
  1146.  o The functions LENGTH, INDEX, SUBSTR, and TRIM provide information
  1147.    about, or manipulate, strings.
  1148.  o The substring-variable notation makes accessible, as a variable, a
  1149.    fixed-length portion of a string variable.
  1150.  o The transfer procedures READSTR and WRITESTR process strings in the same
  1151.    manner that READ and WRITE process textfiles.
  1152.  o The procedure READ has been extended to read strings from textfiles.
  1153. - Binding of Variables.
  1154.  o A variable may optionally be declared to be bindable.  Bindable
  1155.    variables may be bound to external entities (file storage,
  1156.    real-time clock, command lines, etc.).  Only bindable variables
  1157.    may be so bound.
  1158.  o The procedures BIND and UNBIND, together with the related type
  1159.    BINDINGTYPE, provide capabilities for connection and disconnection
  1160.    of bindable internal (file and non-file) variables to external
  1161.    entities.
  1162.  o The function BINDING returns current or default binding information.
  1163. - Direct Access File Handling.
  1164.  o The declaration of a direct-access file indicates an index by which
  1165.    individual file elements may be accessed.
  1166.  o The procedures SEEKREAD, SEEKWRITE, and SEEKUPDATE position the file.
  1167.  o The functions POSITION, LASTPOSITION, and EMPTY report the current
  1168.    position and size of the file.
  1169.  o The update file mode and its associated procedure UPDATE provide
  1170.    in-place modification.
  1171. - File Extend Procedure.  The procedure EXTEND prepares an existing
  1172.  file for writing at its end.
  1173. - Constant Expressions.  A constant expression may occur in any context
  1174.  needing a constant value.
  1175. - Structured Value Constructors.  An expression may represent the value
  1176.  of an array, record, or set in terms of its components.  This is
  1177.  particularly value for defining structured constants.
  1178. - Generalized Function Results.  The result of a function may have any
  1179.  assignable type.  A function result variable may be specified, which
  1180.  is especially useful for functions returning structures.  [A function
  1181.  call may be directly array-index, field-selected, or pointer-dereferenced
  1182.  without having to use an intermediate variable.]
  1183. - Initial Variable State.  The initial state specifier of a type [or record
  1184.  field] can specify the value that variables [, or fields, or variant
  1185.  selectors] are to be created with.
  1186. - Relaxation of Ordering of Declarations.  There may be any number of
  1187.  declaration parts (labels, constants, types, variables, procedures
  1188.  and functions) and in any order.  The prohibition of forward references
  1189.  in declarations is retained.
  1190. - Type Inquiry.  A variable or parameter may be declared to have the
  1191.  type of another parameter of another variable.
  1192. - Implementation Characteristics.  The constant MAXCHAR is the largest
  1193.  value of type CHAR.  The constant MINREAL, MAXREAL, and EPSREAL describe
  1194.  the range of magnitude and the precision of real arithmetic.
  1195. - Case-Statement and Variant Record Enhancements.  Each case-constant-list
  1196.  may contain ranges of values.  An OTHERWISE clause represents all
  1197.  values not listed in the case-constant-lists.
  1198. - Set Extensions.
  1199.  o An operator (><) computes the set symmetric difference.
  1200.  o The function CARD yields the number of members in a set.
  1201.  o A form of the for-statement iterates through the members of a set.
  1202. - Date and Time.  The procedure GETTIMESTAMP and the functions DATE and
  1203.  TIME, together with the related type TIMESTAMP, provide numeric
  1204.  representations of the current date and time and convert numeric
  1205.  representations to strings.
  1206. - Inverse Ord.  A generalizations of SUCC and PRED provides an inverse
  1207.  ORD capability.
  1208. - Standard Numeric Input.  The definition of acceptable character
  1209.  sequences read from a textfile includes all standard numeric
  1210.  representations defined by ANSI X3.42-1975.
  1211. - Non-Decimal Representation of Numbers.  Integer numeric constants may
  1212.  be expressed using bases two through thirty-six.
  1213. - Underscores in Identifiers.  The underscore character (_) may occur
  1214.  within identifiers and are significant to their spelling.
  1215. - Zero Field Widths.  The total field width and fraction digits expressions
  1216.  in write parameters may be zero.
  1217. - Halt.  The procedure HALT causes termination of the program.
  1218. - Complex Numbers.
  1219.  o The simple-type COMPLEX allows complex numbers to be expressed in
  1220.    either Cartesian or polar notation.
  1221.  o The monadic operators + and - and dyadic operators +, -, *, /,
  1222.    =, [and] <> operate on complex values.
  1223.  o The functions CMPLX, POLAR, RE, IM, and ARG construct or provide
  1224.    information about complex values.
  1225.  o The functions ABS, SQR, SQRT, EXP, LN, SIN, COS, [and] ARCTAN
  1226.    operate on complex values.
  1227. - Short Circuit Boolean Evaluation.  The operators AND_THEN and OR_ELSE
  1228.  are logically equivalent to AND and OR, except that evaluation order
  1229.  is defined as left-to-right, and the right operand is not evaluated
  1230.  if the value of the expression can be determined solely from the value
  1231.  of the left operand.
  1232. - Protected Parameters.  A parameter of a procedure or a function can
  1233.  be protected from modification within the procedure or function.
  1234. - Exponentation.  The operators ** and POW provide exponentation of
  1235.  integer, real, and complex numbers to real and integer powers.
  1236. - Subranges Bounds.  A general expression can be used to specify the
  1237.  value of either bound in a subrange.
  1238. - Tag Fields of Dynamic Variables.  Any tag field specified by a
  1239.  parameter to the procedure NEW is given the specified value.
  1240. - Conformant Arrays.  Conformant arrays provide upward compatibility
  1241.  with level 1 of ISO 7185, Programming languages - PASCAL.
  1242. Disclaimer:  The opinions and statements expressed by me are not
  1243.             necessarily those of Digital Equipment Corporation.  ---
  1244. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1245.  
  1246.  
  1247. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1248.  
  1249. Conference 4
  1250. Date       03-01-92 12:25:50
  1251. From       Mark Ouellet
  1252. To         John Gohde
  1253. Subject    Re: What Diff
  1254.  
  1255.     On 24 Feb 92, you, John Gohde, of 1:264/212.0 wrote...
  1256. JG> *         That is why I can't understand why you're having so
  1257. JG> * poor results with TP 6.0's IDE and that is why I keep
  1258. JG> * insisting something must be wrong somewhere in your setup.
  1259. JG>
  1260. JG> Yep, I found the problem. The  number one problem was that the TP
  1261. JG> install  feature  is  NOT  very  intelligent!  Without having the
  1262. JG> Window  Heap Size  set to  the MAX  at 64,  having EMS  is almost
  1263. JG> useless.
  1264. JG> The  TP6 IDE  works a  lot better  now with  EMS, even  without a
  1265. JG> memory manager!  But, on my  8088 it still  balks with my  editor
  1266. JG> program.
  1267. JG>
  1268.        Glad you found the problem, I was begining to feel
  1269. uneasy insisting your setup was wrong ;-)
  1270. JG> Why  Borland made  things difficult  for EMS  users is beyond me.
  1271. JG> Seems like they would have cross-referenced window heap size with
  1272. JG> EMS. Funny  how on page 147  of the User's Guide  the Window Heap
  1273. JG> Size is NOT even mentioned! I  just love manuals that don't point
  1274. JG> out important details  like that. I wouldn't be  surpise if a lot
  1275. JG> of other users don't have the IDE optimized correctly, either.
  1276.        Well it happens, even the best can make mistakes and
  1277. I know a few subjects were forgotten from the manuals,
  1278. SetMemTop is one of them, it's mentionned in the resident
  1279. Help but not in the manuals it seems.
  1280. JG> Nevertheless, I am still proceeding with  my editor. I am using a
  1281. JG> multi-program  / overlay  approach. I  should be  able to  shrink
  1282. JG> required ram to  only 15K!!! inorder to compile  those really big
  1283. JG> programs. It will get the  maximum out of conventional memory. In
  1284. JG> fact, users will  be able to run the TP6  IDE from within it just
  1285. JG> inorder to use the integrated  debugger! And, I think power users
  1286. JG> will like its WordStar like commands, and Macros. Also, I will be
  1287. JG> using EMS, if available.
  1288. John,
  1289.        Sounds interresting, I love the IDE and that
  1290. probably won't ever change but maybe you should consider
  1291. producing an Editor unit.
  1292.        Best regards,
  1293.        Mark Ouellet.
  1294. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  1295.  
  1296.  
  1297. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1298.  
  1299. Conference 4
  1300. Date       03-03-92 08:28:50
  1301. From       Dj Murdoch
  1302. To         Richard Nelson
  1303. Subject    Re: TPVision Patch
  1304.  
  1305.  >         glad to know that, the TP 6.0 TV manuals aren't as
  1306. > bad as some say once you really take the time to read them
  1307. > through.
  1308. RN> Thanks.  Although the more I look back at the TV Guide,
  1309. RN> the more I think of ways I could improve it.  Now if I
  1310. RN> could just get awy with doubling its size....  :-)
  1311. RN>
  1312. >         I would also want to point out that on the Bug
  1313. > report subject, someone pointed out to you some corrections
  1314. > to the manual....which he would have found in the readme
  1315. > file if ihe had read it ;-)
  1316. RN> Such things happen.  For example, Tom Swan did a full-page
  1317. RN> box with his column in PC Techniques a couple of months
  1318. RN> ago that included corrections for the "worst offenders" in
  1319. RN> the TPW docs.  What he neglected to mention was that
  1320. RN> two-thirds of them were corrected in the readme file.  <shrug>
  1321. RN>
  1322. >         Agreed they aren't all there but, the fact he repeats
  1323. > some of them without indicating that they are acknoledged in
  1324. > the readme file is misleading.
  1325. RN> Well, sometimes we forget these things.  In the case I
  1326. RN> mentioned above, the thing I found irritating was that he
  1327. RN> didn't point out that most of the corrections came from
  1328. RN> the readme, and that there were even more things corrected
  1329. RN> there.  I don't mean this as a flame, but it strikes me
  1330. RN> that any report of bugs should at least make mention of
  1331. RN> any other lists of known corrections, errata, etc.
  1332. I'd like to put something like that into my TP 6 bug list.  Can you suggest
  1333. any?  I haven't read README!.DOC for a while, but I don't recall any bugs
  1334. being mentioned there, only corrections to the documentation.
  1335. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1336.  
  1337.  
  1338. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1339.  
  1340. Conference 4
  1341. Date       03-03-92 08:35:40
  1342. From       Dj Murdoch
  1343. To         Trevor Carlsen
  1344. Subject    Re: New Reader!
  1345.  
  1346.  JM> However, none of them have the absolutely wonderful
  1347. JM> integrated debugger in TP 5.x.  That is such a wonderful
  1348. JM> tool I don't think I will ever give it up.  You'll have to
  1349. JM> kill me first and pry it out of my clenched fingers!
  1350. TC> Why give it up just because you give up the IDE? I use TD
  1351. TC> and I guarantee that
  1352. TC> you would not be able to tell the difference if it were not for the
  1353. added
  1354. TC> power and different screen displays.
  1355. That's just not true.  The IDE debugger is preferable in a couple of respects,
  1356. as I've mentioned before.  I'm not sure if this was true about the 5.5 version,
  1357. but in the 6.0 version, you can:
  1358.  
  1359.  - Use the ",r" format modifier to display records properly in the watch
  1360. window
  1361.  - Make small edits to your program without losing all of your watch variables,even quit and reboot without losing your watch variables
  1362.  The IDE debugger is also much faster in big programs.  TD seems to do very
  1363. inefficient searches of the symbol table; if you have a lot of watch variables
  1364. set that are out of scope, it takes a *long* time to decide it should display
  1365. "??".
  1366. I think you're well aware of the deficiencies of the IDE debugger, so I won't
  1367. go into them, but I'll mention bad memory management, and no disassembly
  1368. as the ones that irritate me the most.
  1369. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1370.  
  1371.  
  1372. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1373.  
  1374. Conference 4
  1375. Date       03-03-92 17:27:50
  1376. From       Dj Murdoch
  1377. To         Scott Samet
  1378. Subject    New version of TP
  1379.  
  1380.  > I hear Borland is coming out with a new version of TP and it is
  1381. > supposed to be named Borland Pascal.  It will include a protected
  1382. > mode code generator (yes, true 32-bit code generation).
  1383. SS> Where did you get this info?
  1384. Someone from Borland posted it to Compuserve, and Jeroen Pluimers posted
  1385. it here.  Did you see his message?  It was clear that there was protected
  1386. mode code planned, but it wasn't at all clear to me that it was true 32-bit
  1387. code that was planned.
  1388.  
  1389.  
  1390. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1391.  
  1392.  
  1393. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1394.  
  1395. Conference 4
  1396. Date       03-03-92 18:02:40
  1397. From       Dj Murdoch
  1398. To         Scott Samet
  1399. Subject    Re: Ancestor VMT
  1400.  
  1401.  SS> The DMT's used by TPW already have a pointer back to their
  1402. SS> ancestor's DMT, so there would be no need for a
  1403. SS> modification there, either.
  1404. SS> It seems that the groundwork is in place for this feature.
  1405. One problem in TPW is that of the standard OWL objects, only descendants
  1406. of TWindowsObject have a DMT.  You could write a DescendantOf function that
  1407. worked on those, but it wouldn't work in general, unless you modified TObject.
  1408.  
  1409. The modification would be pretty simple:  just add a single dynamic method,
  1410. and then every derived type would get a DMT.
  1411. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1412.  
  1413.  
  1414. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1415.  
  1416. Conference 4
  1417. Date       03-03-92 18:09:00
  1418. From       Dj Murdoch
  1419. To         Richard Nelson
  1420. Subject    Re: Ancestor VMT
  1421.  
  1422.  RN> I can't say for sure, but it's likely there will be some
  1423. RN> sort of support for calling methods inherited from
  1424. RN> ancestor object types more easily the next time around.
  1425. RN> But even an Ancestor pointer wouldn't be helpful to you,
  1426. RN> unless you're sure you'll never be inheriting more than
  1427. RN> one level down from your root object.
  1428. You're forgetting:  if you don't override a method, you get a duplicate pointer
  1429. to it in the VMT.  It doesn't really matter how many generations ago a method
  1430. was defined.
  1431. RN> Off the top of my head, I think you'd have to keep track
  1432. RN> of the ObjType IDs assigned to your object types at
  1433. RN> registration, and check to make sure that an allowable
  1434. RN> object type is on the stream.  That's the only way I can
  1435. RN> think of right off.
  1436. One other problem with the original request (how to read objects only if
  1437. they've got the right pedigree):  if you don't read it, you won't be able
  1438. to skip over it.  The only way to figure out how much space an object takes
  1439. on the stream is to
  1440. read it.
  1441. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1442.  
  1443.  
  1444. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1445.  
  1446. Conference 4
  1447. Date       03-03-92 18:14:20
  1448. From       Dj Murdoch
  1449. To         Morten Moller
  1450. Subject    Re: Resource Workshop fir Windows (TPW) 
  1451.  
  1452.  MM> When I execute the program (more than the above!) TPW
  1453. MM> gives me an error when I try to open the dialog
  1454. MM> represented by id_DialogForm. "Error code = 1: Continue ?"
  1455. MM> If i continue nothing happends. I have a feeling that the
  1456. MM> problem i caused by the DLL-files
  1457. MM> which came whith the RW: Is the graphic-buttons and so on
  1458. MM> in these ? How do I declare them if I am right ? Shall I
  1459. MM> use the "External" command, and then where ?
  1460. MM> PS: I am NOT an experienxed TPW-programmer, neither TP so
  1461. MM> please give the answer on my level.
  1462. MM> My RW is an evaluations copy. Do you know if a finished
  1463. MM> product is available, and for how much ?
  1464. I don't think RW is sold separately, but a copy comes in the current version
  1465. of BC++.  It has a replacement for one of the OWL units (I think WOBJECTS)
  1466. which you need to use to get it to work.
  1467. I'd expect to see RW in the next release of TPW.
  1468. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1469.  
  1470.  
  1471. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1472.  
  1473. Conference 4
  1474. Date       03-04-92 20:24:20
  1475. From       Dj Murdoch
  1476. To         Addy Santo
  1477. Subject    Re: Tp 5.5 Vs Tp 6.0
  1478.  
  1479.  AS> Tp6 has some wierd bugs that sometimes drive me up the
  1480. AS> wall.
  1481. What are they?  I keep a list, and would like to add any new ones to it.
  1482.  
  1483. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1484.  
  1485.  
  1486. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1487.  
  1488. Conference 4
  1489. Date       03-04-92 20:26:10
  1490. From       Dj Murdoch
  1491. To         Derek Westcott
  1492. Subject    Re: Tp 6.0 Ide
  1493.  
  1494.  DW> I have to disagree with you on that one.  The IDE provides
  1495. DW> at least one necessary debugging feature - location of
  1496. DW> runtime errors in the code.  Outside in DOS, all you get
  1497. DW> is a meaningless address...when you load up something to
  1498. DW> find that address, you've got to rerun the code under the
  1499. DW> finder utility...
  1500. You don't need to re-run it, you just need to re-compile it.  Even TPC can
  1501. use the address that's reported to find the error.  In the IDE, use the Search/
  1502. Find error menu, and with TPC, use the /Faddress option.
  1503. DW> I suppose you can use Turbo Debugger for
  1504. DW> testing purposes as well, but that's almost as bad as the
  1505. DW> IDEs debugger...I have programs too big for TD even...And
  1506. DW> having to exit out, load up your editor, recall the
  1507. DW> compiler and reload TD is just a royal pain between each
  1508. DW> bug check...The IDE is great as long as it can be used,
  1509. DW> and the program fits...but as soon as it gets too big, or
  1510. DW> the IDE fails to uncover something new, it's time to drop
  1511. DW> it and use plain dos...
  1512. DW> ---
  1513. DW>  * SM 1.06 ----- * My 386 does an infinite loop in 4.36 sec.
  1514. If you've got a 386, it should be pretty hard to run out of memory.  TD286
  1515. leaves almost all normal memory free, and TD386 leaves it all free.
  1516. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1517.  
  1518.  
  1519. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1520.  
  1521. Conference 4
  1522. Date       03-04-92 20:30:40
  1523. From       Dj Murdoch
  1524. To         Kelly Small
  1525. Subject    Re: Tp 6.0 Ide
  1526.  
  1527.  DM > Oh, I see your problem.  You didn't know about
  1528. DM > Ctrl-N.  That's the same as
  1529. DM > TP 5.5:  it finds the next occurence of the same
  1530. DM > string, without another
  1531. DM > Ctrl- Q-F.
  1532. KS> Ctrl-N is insert line, I assume you meant Ctrl-L for Find Next.
  1533. You're right!  My fingers know to type Ctrl-L, but my brain doesn't :-).
  1534. In its defence, Ctrl-N is the key to use in TD.
  1535. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1536.  
  1537.  
  1538. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1539.  
  1540. Conference 4
  1541. Date       03-04-92 20:57:40
  1542. From       Dj Murdoch
  1543. To         Jud Mccranie
  1544. Subject    Re: Why I like TP 5.5 IDE (continued)
  1545.  
  1546.  JM> e) Options are hard to set.  The radio button and check box method
  1547. JM> is hard to use.  Arrow keys don't work like they should.  The whole
  1548. JM> system is not organized well.  You can't tell what the hot letter
  1549. JM> for "OK" is.  The "O" is cyan, the "K" is yellow.  Everything else
  1550. JM> is black, except for the hot letters, which are yellow, so the
  1551. JM> yellow one must be it.  I have to go through this thought process
  1552. JM> every time.  (The "O" should be black instead of cyan so the "K"
  1553. JM> will stand out.)
  1554. I think the O is cyan because Enter is an alternate hot key.
  1555. JM> f) The new Find and Find and Replace functions are very poorly
  1556. JM> designed.
  1557. JM> It is extremely difficult to change the options.  I often want to
  1558. JM> change the search options.  Under 5.5 I commonly use U, GU, GUN,
  1559. JM> GWN, UW, and maybe one or two more, plus backwards search versions
  1560. JM> of some of these (UB, etc).  In TP 5.5 you just type in what you
  1561. JM> want.  In 6.0 you have to go through a very difficult process every
  1562. JM> time you want to change the options.  You can't get around through
  1563. JM> the illogically-laid out boxes with the cursor keys.
  1564. I told you the process in a message a week or so ago, and it didn't seem
  1565. "very difficult" to me - where you type one letter, I told you an Alt-Letter
  1566. combination that was equivalent.  A little harder, but since you have the
  1567. hints in front of
  1568. you, the savings in memorization overcome it for me.
  1569. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1570.  
  1571.  
  1572. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1573.  
  1574. Conference 4
  1575. Date       03-04-92 21:06:20
  1576. From       Dj Murdoch
  1577. To         Richard Morris
  1578. Subject    Stream locking
  1579.  
  1580.  RM> I have been working on a Stream descendant to use $5C
  1581. RM> calls, and having a small problem.  I was hoping someone
  1582. RM> had come up with something new, it wasn't but I am sure
  1583. RM> there will be others who get use out of your TPU, so I'll
  1584. RM> pass it on to the Oz Programmers Network.
  1585. I'm working on a Streams unit to add functionality to the streams that come
  1586. with TV.  So far the things I've added or am adding are:
  1587. XMS streams (not my code)
  1588. RAM streams
  1589. Temp streams (choose EMS, XMS, RAM, or File according to priority list)
  1590. Encrypting filter
  1591. Compressing filter
  1592. What are your ideas for file locking?  What problems are you having?
  1593. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1594.  
  1595.  
  1596. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1597.  
  1598. Conference 4
  1599. Date       03-04-92 21:21:10
  1600. From       Dj Murdoch
  1601. To         All
  1602. Subject    TBufStream nasty surprise
  1603.  
  1604.  The declaration for TBufStream.Init is
  1605.  constructor TBufStream.Init(FileName: FNameStr; Mode, Size: Word);
  1606. In a program I'm writing, I forgot that, and coded
  1607.  S := New(PBufStream, Init(filename, 2048, stCreate));
  1608. This introduced a bug that was really dangerous, and really hard to find.
  1609. That declaration looks fine, and the compiler accepts it, but it's very
  1610. wrong.
  1611. The way the Mode word is used is as the AX value in an INT 21 call.  This
  1612. works because the stXXXX constants are set up for it:  stCreate is $3C00
  1613. (DOS Create file call), stOpen is $3D02 (DOS Open file, read/write mode)
  1614. etc.
  1615. However, when you make the switch as I did above, you get something completely
  1616. new.  *TBufStream.Init doesn't check that the Mode word is valid!*  Give
  1617. it a value of 2048, and it merrily goes ahead and calls DOS service 8, since
  1618. 2048=$0800.
  1619.  Luckily, service 8 is "Read without Echo", not "Trash all work that's not
  1620. backed up", so you just get a very perplexing pause in your program.
  1621. If you happen to ask for a buffer size of anywhere from 2304 to 2560 bytes,
  1622. you'll write the filename (and a bunch of junk, until DOS finds a $) to standardoutput.  If you ask for one of 9480 bytes, you'll redirect the system timer
  1623. interrupt
  1624. to point to your filename.  It probably won't be pretty.
  1625.  
  1626.  uses
  1627.    objects;
  1628.  var
  1629.    s : TBufStream;
  1630.  begin
  1631.    s.init('This is a funny way to write a message.$',2400,stOpen);
  1632.    s.init(^M^J'And here''s another.$',2400,stOpen);
  1633.  end.
  1634. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1635.  
  1636.  
  1637. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1638.  
  1639. Conference 4
  1640. Date       03-04-92 21:25:50
  1641. From       Mark Ouellet
  1642. To         Matt Heck
  1643. Subject    Re: What Diff
  1644.  
  1645.     On 26 Feb 92, you, Matt Heck, of 1:216/506.0 wrote...
  1646. MH> Ummm.... just a little tidbit, but all my TP60 stuff, including a fair
  1647.  
  1648. MH> share  of my source fits into about 3 meg... and alot of that is my
  1649.  
  1650. MH> source...
  1651. Thanks Matt,
  1652.        in any case it seems my persistance paid-off, John
  1653. found his problem.
  1654.        Best regards,
  1655.        Mark Ouellet.
  1656. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  1657.  
  1658.  
  1659. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1660.  
  1661. Conference 4
  1662. Date       03-05-92 08:08:40
  1663. From       Dj Murdoch
  1664. To         Gerald Gutierrez
  1665. Subject    Re: Enhanced Readkey function
  1666.  
  1667.  GG> Simple question. How exactly does one reference a string
  1668. GG> when using an assembler function ?
  1669. This is covered specially in the Programmer's guide, around p. 304.
  1670. GG> For example.. say I
  1671. GG> want to pass a string to the function and have it return
  1672. GG> the string with all characters advanced one step in the
  1673. GG> ascii table ( ie: 'A' to 'B', '1' to '2', etc... )..
  1674. GG>   Function AdvStrn ( strn:string ) : string; Assembler;
  1675.       asm
  1676.         push ds         { Save DS; the string instructions use it. }
  1677.         lds  si,strn    { Get DS:SI to point to the source string }
  1678.         les  di,@result { Get ES:DI to point to the function result }
  1679.         lodsb           { Get the length byte }
  1680.         mov  cl,al      { and put a copy in CX }
  1681.         xor  ch,ch
  1682.         stosb           { Store it }
  1683.  
  1684.         jcxz @2
  1685. @1:      lodsb           { main loop }
  1686.         inc al
  1687.         stosb
  1688.         loop @1
  1689. @2:    end;
  1690.  
  1691. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1692.  
  1693.  
  1694. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1695.  
  1696. Conference 4
  1697. Date       03-05-92 08:18:40
  1698. From       Dj Murdoch
  1699. To         Richard Morris
  1700. Subject    Re: Ancestor VMT
  1701.  
  1702.  RM> Yes thanks for that.  The Only problem is that the
  1703. RM> functionality does not extend to the TV Heirachy. I guess
  1704. RM> I could have a termninator to Descendof in every heirachy
  1705. RM> object I write that descends directly from a TV object,
  1706. RM> which knows its heirachy path to TObject.
  1707. This is a pretty common problem, I find:  Borland left something out of the
  1708. TV hierarchy, and putting it into descendants only isn't nearly as convenient
  1709. as it would be if you could go back and modify the original.  I could buy
  1710. the TV source
  1711. and just do that, but then I'd have a big problem with upgrades.
  1712. Perhaps a language extension is in order.  It seems to me that it would be
  1713. possible for the compiler to allow you to add methods to existing object
  1714. types, and have those methods inherited by all types in the hierarchy.  I
  1715. think it would work,
  1716. because only code that Uses your new unit would know about the extensions;
  1717. the way VMTs work, it looks to me as though they could be extended without
  1718. causing any conflicts.
  1719. One possibility would be that two units would independently extend an object;
  1720. then things would get messed up if you tried to use both units in the same
  1721. program.  I'd enforce a rule:  in any program, object extensions would have
  1722. to occur strictly
  1723. sequentially.  If units A and B both want to extend TObject, then A *must*
  1724. use B or vice versa.
  1725. I think multiple inheritance would be another solution to this problem, but
  1726. more powerful (and harder to implement).
  1727. Some extensions I've wished for:
  1728.  - The DescendantOf methods I mentioned
  1729.  - An IntegrityCheck method for debugging that checks that the object is
  1730. well-constructed, and hasn't been damaged
  1731.  - A Copy method that allocates and returns a pointer to a copy of Self.
  1732. I've never bothered with DescendantOf, but the base object in my own object
  1733. hierarchy has both an IntegrityCheck and a Copy.  This is fine, except when
  1734. I want to use TV objects that are descendants of anything but TObject, since
  1735. that's where
  1736. my base object descends from.
  1737.  
  1738. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1739.  
  1740.  
  1741. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1742.  
  1743. Conference 4
  1744. Date       03-05-92 08:36:50
  1745. From       Dj Murdoch
  1746. To         Scott Davis
  1747. Subject    Re: Memory Allocation...
  1748.  
  1749.  SD> I am using Turbo Pascal 5.5 and I was hoping that someone could
  1750. SD> help me.  I've been using it for quite awhile, but I only recently
  1751. SD> started working with dynamic variables allocated on the heap.
  1752. SD> I am using GetMem to allocate space for variable-length data
  1753. SD> blocks (and then using FreeMem to de-allocate the memory
  1754. SD> when I'm through with it).  The only problem is that the
  1755. SD> data blocks MUST begin on an even paragraph boundary, and
  1756. SD> I don't know how to do this.
  1757. SD> Any help that anyone could give me would be most appreciated.
  1758. You could always allocate 15 more bytes than you really need, and then skip
  1759. over the part that isn't on a paragraph boundary.  It'll make allocation
  1760. and deallocation more complicated, though.
  1761. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1762.  
  1763.  
  1764. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1765.  
  1766. Conference 4
  1767. Date       03-05-92 18:45:00
  1768. From       Norbert Igl
  1769. To         Gerald Gutierrez
  1770. Subject    Stringhandling in  ASM ???
  1771.  
  1772.  > Simple question. How exactly does one reference a string when using
  1773. > an assembler function ? For example.. say I want to pass a string to
  1774. > the function and have it return the string with all characters
  1775. > advanced one step in the ascii table ( ie: 'A' to 'B', '1' to '2',
  1776. >   Function AdvStrn ( strn:string ) : string; Assembler;
  1777.     begin
  1778. >     ASM
  1779. >       les di,strn
  1780.         mov cl, es:[di]     ; strn[0] -> Cl
  1781.         xor ch, ch          ; 0 -> CH
  1782.   @Lop: inc di               ; next char
  1783.         inc byte Ptr es:[di] ; succ()
  1784.         Loop @Lop            ; until CX=0
  1785.       end;
  1786.      AdvStr := Strn          ; return it...
  1787.     End;
  1788. > Thanks.
  1789.   you're welcome...
  1790.   Bye from Germany, Norbert
  1791. * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  1792.  
  1793.  
  1794. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1795.  
  1796. Conference 4
  1797. Date       03-03-92 19:55:00
  1798. From       Wilbert Van.leijen
  1799. To         Ben Thompson
  1800. Subject    Virus scanner
  1801.  
  1802.  ** Quoting a message from Ben Thompson to All  **
  1803. > I am interested in developing a virus scanner/eliminator in pascal.  I
  1804. > don't know how hard it'll be as of yet, but I would like some input on
  1805. > this idea.  I am just beginning in PASCAL, and I's somehow like to
  1806. > develop a 'virucide' to eliminate all of those l'il buggers.
  1807. > ANY suggestions (I need to start somewhere)?
  1808. Don't feel offended, but the very attempt to write an effective virus-scanner
  1809. presupposes working knowledge on the treshold of Guru-status with regard
  1810. to DOS
  1811. memory management, interrupt handling, disk I/O, data encryption, as well
  1812. as a
  1813. number of other related topics.
  1814. Well, I can give you some suggestions for basic research:
  1815. do you know how to
  1816. -  access and manipulate data stored in CMOS?
  1817. -  write a bootstrap loader?
  1818. -  chain a hardware interrupt?
  1819. -  go resident and encrypt code in the process?
  1820. -  trap requests for specific DOS services?
  1821. -  update the FAT?
  1822. -  how to get the original entry point of the BIOS INT 13h handler, even
  1823.  after five other device drivers and TSRs have hooked this interrupt?
  1824. etc. etc.
  1825. From the perspective of a virus-eliminator, you should be able to deal with
  1826. techniques as described above.
  1827. Regards,
  1828. Wilbert
  1829. * Origin: Point Wilbert | Taking <WHAM> Two Bottles <WHAM> Under The Shower!!!
  1830. (2:500/12.10956)
  1831.  
  1832.  
  1833. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1834.  
  1835. Conference 4
  1836. Date       03-06-92 08:03:10
  1837. From       Dj Murdoch
  1838. To         Ruurd Pels
  1839. Subject    Re: Intr Versus Basm
  1840.  
  1841.  RP> What I still can't see is why they want to treat the
  1842. RP> interrupt table as a jump table, instead of just issuing
  1843. RP> an INT instruction....
  1844. They have different effects.  An INT instruction pushes the flags, pushes
  1845. CS, pushes the address of the next instruction, *then* uses the interrupt
  1846. table as a jump table.  If the stack is already set up the way it should
  1847. be (e.g.  you're chaining
  1848. to an old ISR), you don't want to touch it.
  1849. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1850.  
  1851.  
  1852. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1853.  
  1854. Conference 4
  1855. Date       03-06-92 08:05:50
  1856. From       Dj Murdoch
  1857. To         David G. Edwards
  1858. Subject    Re: Turbo Vision Streams
  1859.  
  1860.  DG> Then, would I need to define somewhere:
  1861. DG> constructor TNamedStream.init(filename:string; mode,size:word); ?
  1862. DG> begin
  1863. DG>   TNamedStream.name:= NewStr(filename);
  1864. DG>   if TNamedStream.name=nil then { fail somehow? }
  1865. DG>   else TBufStream.init(filename, mode, size);
  1866. DG> end; ?
  1867. DG> And now that I have a constructor, do I have to have a destructor?
  1868. DG> destructor TNamedStream.done; ?
  1869. DG> begin
  1870. DG>   DisposeStr(TNamedStream.name);
  1871. DG>   TBufStream.done;
  1872. DG> end; ?
  1873. Yep, that looks as though it would work.  I'd make a couple of changes to
  1874. the constructor:
  1875.  
  1876.  TNamedStream.name := NewStr(filename);
  1877.  if TNamedStream.name = nil then
  1878.    fail;
  1879.  if not TBufStream.init(filename, mode, size) then
  1880.    fail;
  1881. but other than than, it looks fine to me.
  1882. DG> My next question (why is there always a "next question"?)
  1883. DG> is: "How can I get the complete DOS error information when
  1884. DG> a stream error occurs?"   "ErrorInfo" isn't good enough
  1885. DG> since it returns ambiguous codes. ErrorInfo will report
  1886. DG> error 162 (hardware failure) if a file (record) is locked
  1887. DG> or if a diskette isn't formatted, for example.  I need to
  1888. DG> use DOS function $59 to obtain the extended error info,
  1889. DG> but how can I get my new error function to replace the one in TStream?
  1890.  
  1891. Well, Error is a virtual method, so I'd guess that would be the place to
  1892. put it.  I *think* (but I'm not sure) that the extended error info will still
  1893. be intact when your Error method gets called.
  1894. It might also be safe to put it in the global StreamError procedure, but
  1895. I'm not sure about that.  The closer to the source, the better.
  1896. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1897.  
  1898.  
  1899. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1900.  
  1901. Conference 4
  1902. Date       03-06-92 08:10:40
  1903. From       Dj Murdoch
  1904. To         Martin Bouchard
  1905. Subject    Re: Interfacing .ASM
  1906.  
  1907.  MB> The problem is that I don't know how to convert an .OBJ to
  1908. MB> a .TPU or something that could work. Does Tp 6.0 has a
  1909. MB> non-standard way to handle .OBJ?
  1910. Yes, it's quite non-standard.  Look for all the details in the Programmer's
  1911. Guide, Chapter 23.
  1912. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1913.  
  1914.  
  1915. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1916.  
  1917. Conference 4
  1918. Date       03-06-92 08:15:00
  1919. From       Dj Murdoch
  1920. To         Ruurd Pels
  1921. Subject    Re: Runtime Error 200 On An Xt.
  1922.  
  1923.  RP> From the online help on runtime error 200:
  1924. RP> Runtime error 200: Division by zero
  1925. RP> The program attempted to divide a number by zero during a /, mod, or
  1926. div
  1927. RP> operation.
  1928. RP> Chase bug as follows:
  1929. RP> 1    Use IDE debugger to determine where error is generated
  1930. RP> 2    Check out parameters used in arithmetic
  1931. RP> 3    Correct
  1932. The online help isn't quite right.  I think that's the only way to get error
  1933. 200 in Pascal code, but you can also get it in assembler as a divide overflow.
  1934. For example, the following mini-program aborts on a divide overflow:
  1935. begin
  1936.   asm
  1937.     mov ax,1000
  1938.     mov bl,1
  1939.     div bl
  1940.   end;
  1941. end.
  1942.  I can't remember if there are other ways to get it, and I can't think of
  1943. any reason you'd get it on an XT where you didn't on an AT, unless the program
  1944. used 286-specific code.
  1945. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1946.  
  1947.